home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_07_01 / v7n1080a.txt < prev    next >
Text File  |  1987-04-26  |  20KB  |  794 lines

  1.  
  2. /*                              JustSayYes.c
  3.  
  4.    An example of Intuition use. Presenting: a generic color control window,
  5.    a very simple menu, and lots of odds and ends. 4/25/88 JMFiore dissidents.
  6.    This program is in the public domain. Use it as you see fit (with the
  7.    exception of distribution for a profit).
  8.  
  9.    compiled and linked with Manx Aztec C v3.6 under AmigaDOS 1.2
  10.  
  11.    cc +L JustSayYes.c
  12.    ln +cdb JustSayYes.o -lc32
  13.  
  14. */
  15.  
  16. #include "functions.h"
  17. #include "intuition/intuition.h"
  18.  
  19. /*---------------------------------defines---------------------------------*/
  20.  
  21.   /* MyText(*RastPort, Xposition, Yposition, char *buffer) */
  22.  
  23. #define MyText(r,x,y,b) Move((r),(x),(y)); Text((r),(b),strlen(b))
  24.  
  25. #define INTUITION_REV 33L
  26. #define GRAPHICS_REV  33L
  27. #define DEPTH         3
  28. #define MAX_COLORS    8     /* 2 raised to the DEPTH power */
  29.  
  30. /* #define COLLECT_RODENT_GYRATIONS */
  31. /* uncomment the line above if you would like a less processor intensive
  32.    color slider update, vs. responding to every single mouse move. */
  33.  
  34.  
  35. /* color requester gagdets.
  36.    These defines are used as ID numbers in order to keep track of which
  37.    color gadget is selected. CG0 - CG7 are the color select boxes, CGR, CGG
  38.    CGB are the RGB sliders, and CGSAVE, CGCANCEL are the Save/Cancel buttons. */
  39.  
  40. #define CGLOWEST      1
  41. #define CG0           2
  42. #define CG1           3
  43. #define CG2           4
  44. #define CG3           5
  45. #define CG4           6
  46. #define CG5           7
  47. #define CG6           8
  48. #define CG7           9
  49. #define CGR          10
  50. #define CGG          11
  51. #define CGB          12
  52. #define CGSAVE       13
  53. #define CGCANCEL     14
  54. #define CGHIGHEST    15
  55.  
  56. struct IntuitionBase *IntuitionBase=0L;
  57. struct GfxBase       *GfxBase=0L;
  58. struct Window        *back_wind=0L;
  59. struct Window        *color_wind=0L;
  60. struct Screen        *main_scrn=0L;
  61. struct ViewPort      *color_w_v_port=0L;
  62.  
  63.  
  64. /* use the 80 character topaz font for the screen lettering */
  65.  
  66. struct TextAttr my_font_attr={(UBYTE *)"topaz.font",TOPAZ_EIGHTY,\
  67.                               FS_NORMAL, FPF_ROMFONT};
  68.  
  69. struct NewScreen ns={0,0,640,200, DEPTH, 0,1, HIRES,\
  70.                      SCREENBEHIND | CUSTOMSCREEN, &my_font_attr, \
  71.                      (UBYTE *)"|| Color Window Example || ", NULL, NULL };
  72.  
  73. struct NewWindow b_nw={0,0,640,200, -1,-1, GADGETUP | GADGETDOWN | \
  74.                        MENUPICK , SMART_REFRESH | ACTIVATE | BACKDROP | \
  75.                        BORDERLESS, NULL, NULL, \
  76.                        (UBYTE *)" Backdrop Window ",\
  77.                        NULL, NULL, 640, 200, 640, 200, CUSTOMSCREEN};
  78.  
  79.  
  80. USHORT sys_color_table[MAX_COLORS]={0xcbb,0x530,0xf00,0xf40,0xbf0,\
  81.                                     0x84f,0xbfd,0x48b};
  82.  
  83. /* Quit requester Auto() */
  84.  
  85. struct IntuiText qr_txt[]={\
  86.  {0,1,JAM1,20,10,NULL,(UBYTE *)"Quit for sure?"},\
  87.  {0,1,JAM1,5,3,NULL,(UBYTE *)"Okay"},\
  88.  {0,1,JAM1,5,3,NULL,(UBYTE *)"Naaahh"},};
  89.  
  90.  
  91.  
  92. /* Menu set-up */
  93.  
  94. struct IntuiText itxt[]={\
  95.  {0,1,JAM1,0,0,NULL,(UBYTE *)"-Quit-"},\
  96.  {0,1,JAM1,0,0,NULL,(UBYTE *)" Color"},};
  97.  
  98.  
  99. struct MenuItem mi[]={\
  100.  {NULL,0,(0*10+1),(104+COMMSEQ),8,\
  101.   (ITEMTEXT | COMMSEQ | ITEMENABLED | HIGHBOX),\
  102.   NULL,(APTR)&itxt[0],NULL,'Q'},\
  103.  
  104.   /* Color */
  105.  
  106.  {NULL,0,(0*10+1),(52),8,\
  107.   (ITEMTEXT | ITEMENABLED | HIGHBOX),\
  108.   NULL,(APTR)&itxt[1],NULL},};
  109.  
  110.  
  111. struct Menu main_menu[]={\
  112.  {&main_menu[1],0,0,72,0,MENUENABLED,\
  113.   "Project  ",&mi[0]},\
  114.  
  115.  {NULL,280,0,56,0,MENUENABLED,\
  116.   "Color  ",&mi[1]},};
  117.  
  118.  
  119.  
  120. /* shapes for push buttons */
  121.  
  122. SHORT button50_pts[]={0,0, 50,0, 50,12, 0,12, 0,0};
  123.  
  124. SHORT button80_pts[]={0,0, 80,0, 80,12, 0,12, 0,0};
  125.  
  126.  
  127. struct Border button50= {0,0,2,0,JAM1,5,&button50_pts[0],NULL};
  128.  
  129. struct Border button80= {0,0,3,0,JAM1,5,&button80_pts[0],NULL};
  130.  
  131.  
  132. /* data chunk for color window, hi/un light, etc */
  133.  
  134. #define CGHSIZE      20 /* size of gadgets */
  135. #define CGVSIZE       7
  136. #define CGHOFF       30 /* offsets for successive gadgets */
  137. #define CGVOFF       10
  138. #define CGHPOS      170 /* initial position for starting gadget, CG0 */
  139. #define CGVPOS       20
  140.  
  141.  
  142.  
  143. SHORT color_hi_pts[]={-4,-2, CGHSIZE+2,-2, CGHSIZE+2,CGVSIZE+1,
  144.                       -4,CGVSIZE+1, -4,-2};
  145.  
  146. struct Border color_hi_light=\
  147.        {0,0,1,0,JAM1,5,&color_hi_pts[0],NULL};
  148.  
  149. struct Border color_un_light=\
  150.        {0,0,0,0,JAM1,5,&color_hi_pts[0],NULL};
  151.  
  152.  
  153.  
  154. struct IntuiText color_txt[]={\
  155.  {4,0,JAM1,15,3,NULL,(UBYTE *)"Cancel"},\
  156.  {5,0,JAM1,10,3,NULL,(UBYTE *)"Save"},\
  157.  {1,0,JAM1,-30,1,NULL,(UBYTE *)"R"},\
  158.  {1,0,JAM1,-30,1,NULL,(UBYTE *)"G"},\
  159.  {1,0,JAM1,-30,1,NULL,(UBYTE *)"B"},};
  160.  
  161.  
  162. struct Image color_box[]={\
  163.  {0,0,CGHSIZE,CGVSIZE,0,NULL,0,0,NULL},\
  164.  {0,0,CGHSIZE,CGVSIZE,0,NULL,0,1,NULL},\
  165.  {0,0,CGHSIZE,CGVSIZE,0,NULL,0,2,NULL},\
  166.  {0,0,CGHSIZE,CGVSIZE,0,NULL,0,3,NULL},\
  167.  {0,0,CGHSIZE,CGVSIZE,0,NULL,0,4,NULL},\
  168.  {0,0,CGHSIZE,CGVSIZE,0,NULL,0,5,NULL},\
  169.  {0,0,CGHSIZE,CGVSIZE,0,NULL,0,6,NULL},\
  170.  {0,0,CGHSIZE,CGVSIZE,0,NULL,0,7,NULL},};
  171.  
  172. struct Image color_img[3];
  173.  
  174. struct PropInfo color_prop[]={\
  175.  {AUTOKNOB | FREEHORIZ, 0x0, 0, 0xffff/16+1, 0},\
  176.  {AUTOKNOB | FREEHORIZ, 0x0, 0, 0xffff/16+1, 0},\
  177.  {AUTOKNOB | FREEHORIZ, 0x0, 0, 0xffff/16+1, 0},};
  178.  
  179. struct Gadget color_gadg[]={\
  180.  {&color_gadg[1],25,72,50,12,GADGHCOMP, RELVERIFY,\
  181.   BOOLGADGET, (APTR)&button50,NULL,\
  182.   &color_txt[1],NULL,NULL,CGSAVE,NULL},\
  183.  
  184.  {&color_gadg[2],40,20,110,9,GADGHCOMP,GADGIMMEDIATE |\
  185.   RELVERIFY | FOLLOWMOUSE,\
  186.   PROPGADGET ,(APTR)&color_img[0],NULL,\
  187.   &color_txt[2],NULL,(APTR)&color_prop[0],CGR,NULL},\
  188.  
  189.  {&color_gadg[3],40,32,110,9,GADGHCOMP,GADGIMMEDIATE |\
  190.   RELVERIFY | FOLLOWMOUSE,\
  191.   PROPGADGET ,(APTR)&color_img[1],NULL,\
  192.   &color_txt[3],NULL,(APTR)&color_prop[1],CGG,NULL},\
  193.  
  194.  {&color_gadg[4],40,44,110,9,GADGHCOMP,GADGIMMEDIATE |\
  195.   RELVERIFY | FOLLOWMOUSE,\
  196.   PROPGADGET ,(APTR)&color_img[2],NULL,\
  197.   &color_txt[4],NULL,(APTR)&color_prop[2],CGB,NULL},\
  198.  
  199.  {&color_gadg[5], CGHPOS, CGVPOS, CGHSIZE, CGVSIZE,\
  200.   GADGHNONE | GADGIMAGE, GADGIMMEDIATE,\
  201.   BOOLGADGET ,(APTR)&color_box[0],NULL,\
  202.   NULL,NULL,NULL,CG0,NULL},\
  203.  
  204.  {&color_gadg[6], CGHPOS, CGVPOS+CGVOFF, CGHSIZE, CGVSIZE,\
  205.   GADGHNONE | GADGIMAGE, GADGIMMEDIATE,\
  206.   BOOLGADGET ,(APTR)&color_box[1],NULL,\
  207.   NULL,NULL,NULL,CG1,NULL},\
  208.  
  209.  {&color_gadg[7], CGHPOS, CGVPOS+2*CGVOFF, CGHSIZE, CGVSIZE, \
  210.   GADGHNONE | GADGIMAGE, GADGIMMEDIATE,\
  211.   BOOLGADGET ,(APTR)&color_box[2],NULL,\
  212.   NULL,NULL,NULL,CG2,NULL},\
  213.  
  214.  {&color_gadg[8], CGHPOS, CGVPOS+3*CGVOFF, CGHSIZE, CGVSIZE, \
  215.   GADGHNONE | GADGIMAGE, GADGIMMEDIATE,\
  216.   BOOLGADGET ,(APTR)&color_box[3],NULL,\
  217.   NULL,NULL,NULL,CG3,NULL},\
  218.  
  219.  {&color_gadg[9], CGHPOS+CGHOFF, CGVPOS, CGHSIZE, CGVSIZE, \
  220.   GADGHNONE | GADGIMAGE, GADGIMMEDIATE,\
  221.   BOOLGADGET ,(APTR)&color_box[4],NULL,\
  222.   NULL,NULL,NULL,CG4,NULL},\
  223.  
  224.  {&color_gadg[10], CGHPOS+CGHOFF, CGVPOS+CGVOFF, CGHSIZE, CGVSIZE, \
  225.   GADGHNONE | GADGIMAGE, GADGIMMEDIATE,\
  226.   BOOLGADGET ,(APTR)&color_box[5],NULL,\
  227.   NULL,NULL,NULL,CG5,NULL},\
  228.  
  229.  {&color_gadg[11], CGHPOS+CGHOFF, CGVPOS+2*CGVOFF, CGHSIZE, CGVSIZE, \
  230.   GADGHNONE | GADGIMAGE, GADGIMMEDIATE,\
  231.   BOOLGADGET ,(APTR)&color_box[6],NULL,\
  232.   NULL,NULL,NULL,CG6,NULL},\
  233.  
  234.  {&color_gadg[12], CGHPOS+CGHOFF, CGVPOS+3*CGVOFF, CGHSIZE, CGVSIZE, \
  235.   GADGHNONE | GADGIMAGE, GADGIMMEDIATE,\
  236.   BOOLGADGET ,(APTR)&color_box[7],NULL,\
  237.   NULL,NULL,NULL,CG7,NULL},\
  238.  
  239.  {NULL,170,72,80,12,GADGHCOMP, RELVERIFY,\
  240.   BOOLGADGET ,(APTR)&button80,NULL,\
  241.   &color_txt[0],NULL,NULL,CGCANCEL,NULL},};
  242.  
  243.  
  244. struct NewWindow c_nw={100,20,270,100, -1,-1, GADGETDOWN | GADGETUP | \
  245.                      MOUSEMOVE, SMART_REFRESH | ACTIVATE | WINDOWDRAG |\
  246.                      WINDOWDEPTH | REPORTMOUSE, &color_gadg[0], NULL, \
  247.                      (UBYTE *) " -Color Control- ", NULL, NULL,\
  248.                      0,0,0,0, CUSTOMSCREEN};
  249.  
  250. /* color_box_ptr will indicate which pen color (image) needs to be
  251.    highlighted. Initialized to color 3 (pen #2) */
  252.  
  253. struct Gadget        *color_box_ptr = &color_gadg[6];
  254.  
  255.  
  256. VOID open_all(), damp_mop(), handle_main_messages(), handle_color_messages(),\
  257.      handle_main_menu(), setup_color(), handle_color_gadg(), hi_color(), \
  258.      update_color_pots();
  259.  
  260.  
  261.  
  262.  
  263. /*------------------------------start of main()----------------------------*/
  264.  
  265. main()
  266.  
  267. {
  268.  LONG main_wait_bit, color_wait_bit, wait_mask;
  269.  
  270.  
  271. /*-------------------------open Intuition and graph